package com.own.business.pay.entity.bo;

import com.own.business.pay.entity.po.BillHistory;
import com.own.component.common.base.entity.BaseBo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * BillHistoryBo
 *
 * @author chenxueli
 * @date 2023-08-28 17:14:50
 */
@Getter
@Setter
@ToString
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class BillHistoryBo extends BaseBo<BillHistory> implements Serializable {

    /**
     * 用户id
     */
    private Long userId;

    /**
     * 交易类型（wechat、alipay、balance...）
     */
    private String tradeType;

    /**
     * 流水类型（1=收入 2=支出 3=退款）
     */
    private Integer type;

    /**
     * 商户单号
     */
    private String outTradeNo;

    /**
     * 业务类型
     */
    private String businessType;

    /**
     * 商户退款单号
     */
    private String outRefundNo;

    /**
     * 订单标题
     */
    private String subject;

    /**
     * 订单附加信息
     */
    private String body;

    /**
     * 订单总金额，单位为分
     */
    private Long totalAmount;

    /**
     * 退款金额，单位为分
     */
    private Long refundAmount;

    /**
     * 订单超时时间
     */
    private LocalDateTime expireTime;

    /**
     * 订单状态（1=新建 2=完成 4=订单关闭 5=超时取消）
     */
    private Integer status;

    /**
     * 交易时间
     */
    private LocalDateTime tradeTime;

    /**
     * 通知数据
     */
    private String notifyData;

    /**
     * 转持久化对象
     *
     * @param entity 原持久化对象
     * @return 持久化对象
     */
    @Override
    public BillHistory toPo(BillHistory entity) {
        if (entity == null) {
            entity = new BillHistory();
        }
        entity.setFkUserId(this.userId);
        entity.setTradeType(this.tradeType);
        entity.setType(this.type);
        entity.setOutTradeNo(this.outTradeNo);
        entity.setBusinessType(this.businessType);
        entity.setOutRefundNo(this.outRefundNo);
        entity.setSubject(this.subject);
        entity.setBody(this.body);
        entity.setTotalAmount(this.totalAmount);
        entity.setRefundAmount(this.refundAmount);
        entity.setExpireTime(this.expireTime);
        entity.setStatus(this.status);
        entity.setTradeTime(this.tradeTime);
        entity.setNotifyData(this.notifyData);
        return super.toPo(entity);
    }

}

